package com.blog.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * VO（Value Object，值对象）是一种设计模式，用于表示应用程序中的数据对象或值。
 * 在Spring Boot中，VO通常用于表示从数据库中检索的数据，
 *      例如 实体对象的属性 或 DTO（Data Transfer Object，数据传输对象）中的数据。

 * VO通常包含数据字段（例如姓名、年龄、性别等）以及相应的getter和setter方法。
 *      在Spring Boot中，VO可以用于组织和传递数据，甚至可以进行数据校验和转换。
 *
 * @Result<T>定义一个返回的结果集
 * */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
    private Integer code;
    private String msg;
    private  T data;

    public static <T> Result <T> success(){
        return new Result<>(200,"success",null);
    }

    public static <T> Result <T> success(String message){
        return new Result<>(200,message,null);
    }

    public static <T> Result <T> success(T data){
        return new Result<>(200,"success",data);
    }

    public static <T> Result <T> success(T data,String message){
        return new Result<>(200,message,data);
    }


    public static <T> Result <T> fail(){
        return new Result<>(403,"fail",null);
    }

    public static <T> Result <T> fail(Integer code){
        return new Result<>(code,"fail",null);
    }

    public static <T> Result <T> fail(String message){
        return new Result<>(403,message,null);
    }

    public static <T> Result <T> fail(Integer code,String message){
        return new Result<>(code,message,null);
    }

}
